{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib\n",
    "from matplotlib import pyplot as plt\n",
    "matplotlib.rcParams['font.size'] = 18\n",
    "matplotlib.rcParams['figure.titlesize'] = 18\n",
    "matplotlib.rcParams['figure.figsize'] = [9, 7]\n",
    "matplotlib.rcParams['font.family'] = ['KaiTi']\n",
    "matplotlib.rcParams['axes.unicode_minus']=False\n",
    "\n",
    "import  os\n",
    "import  tensorflow as tf\n",
    "import  numpy as np\n",
    "from tensorflow.keras import layers, optimizers, Sequential, metrics\n",
    "\n",
    "tf.random.set_seed(1234)\n",
    "np.random.seed(1234)\n",
    "os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'\n",
    "assert tf.__version__.startswith('2.')\n",
    "\n",
    "from load_dataset import load_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "def preprocess(x,y):\n",
    "    # x: 图片的路径，y：图片的数字编码\n",
    "    x = tf.io.read_file(x)\n",
    "    x = tf.image.decode_jpeg(x, channels=1) # RGBA\n",
    "    x = tf.image.resize(x, [28, 28])\n",
    "\n",
    "#     x = tf.image.random_flip_left_right(x)\n",
    "#     x = tf.image.random_flip_up_down(x)\n",
    "#     x = tf.image.random_crop(x, [224,224,3])\n",
    "\n",
    "    # x: [0,255]=> -1~1\n",
    "    x = tf.cast(x, dtype=tf.float32) / 255.\n",
    "    y = tf.convert_to_tensor(y)\n",
    "    y = tf.one_hot(y, depth=10)\n",
    "\n",
    "    return x, y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "batchsz = 1024\n",
    "# 创建训练集Datset对象\n",
    "images, labels, table = load_data('4_Png',mode='train')\n",
    "db_train = tf.data.Dataset.from_tensor_slices((images, labels))\n",
    "db_train = db_train.map(preprocess).batch(batchsz).repeat(10)\n",
    "# 创建验证集Datset对象\n",
    "images2, labels2, table = load_data('4_Png',mode='val')\n",
    "db_val = tf.data.Dataset.from_tensor_slices((images2, labels2))\n",
    "db_val = db_val.map(preprocess).batch(batchsz).repeat(10)\n",
    "# 创建测试集Datset对象\n",
    "images3, labels3, table = load_data('4_Png',mode='test')\n",
    "db_test = tf.data.Dataset.from_tensor_slices((images3, labels3))\n",
    "db_test = db_test.map(preprocess).batch(batchsz).repeat(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<RepeatDataset shapes: ((None, 28, 28, 1), (None, 10)), types: (tf.float32, tf.float32)>"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "db_test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_6\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "conv2d_12 (Conv2D)           multiple                  832       \n",
      "_________________________________________________________________\n",
      "max_pooling2d_12 (MaxPooling multiple                  0         \n",
      "_________________________________________________________________\n",
      "conv2d_13 (Conv2D)           multiple                  51264     \n",
      "_________________________________________________________________\n",
      "max_pooling2d_13 (MaxPooling multiple                  0         \n",
      "_________________________________________________________________\n",
      "flatten_6 (Flatten)          multiple                  0         \n",
      "_________________________________________________________________\n",
      "dense_12 (Dense)             multiple                  3212288   \n",
      "_________________________________________________________________\n",
      "dense_13 (Dense)             multiple                  10250     \n",
      "=================================================================\n",
      "Total params: 3,274,634\n",
      "Trainable params: 3,274,634\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "from tensorflow import keras\n",
    "\n",
    "cnn_layers = [\n",
    "    layers.Conv2D(32, kernel_size=[5, 5], padding=\"same\", activation=tf.nn.relu),\n",
    "    layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),\n",
    "    layers.Conv2D(64, kernel_size=[5, 5], padding=\"same\", activation=tf.nn.relu),\n",
    "    layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),\n",
    "    layers.Flatten(),\n",
    "    layers.Dense(1024, activation=tf.nn.relu),\n",
    "    layers.Dense(10, activation=tf.nn.softmax)\n",
    "]\n",
    "\n",
    "model = Sequential(cnn_layers)\n",
    "model.compile(optimizer=keras.optimizers.Adam(), loss=keras.losses.CategoricalCrossentropy(), \n",
    "             metrics=[keras.metrics.CategoricalAccuracy()])\n",
    "model.build(input_shape=(None, 28, 28, 1))\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train for 90 steps, validate for 50 steps\n",
      "Epoch 1/10\n",
      "90/90 [==============================] - 21s 234ms/step - loss: 0.2644 - categorical_accuracy: 0.8975 - val_loss: 0.1327 - val_categorical_accuracy: 0.9372\n",
      "Epoch 2/10\n",
      "90/90 [==============================] - 20s 226ms/step - loss: 0.1151 - categorical_accuracy: 0.9458 - val_loss: 0.1283 - val_categorical_accuracy: 0.9363\n",
      "Epoch 3/10\n",
      "90/90 [==============================] - 20s 225ms/step - loss: 0.0907 - categorical_accuracy: 0.9568 - val_loss: 0.0825 - val_categorical_accuracy: 0.9624\n",
      "Epoch 4/10\n",
      "90/90 [==============================] - 20s 226ms/step - loss: 0.0755 - categorical_accuracy: 0.9649 - val_loss: 0.0697 - val_categorical_accuracy: 0.9676\n",
      "Epoch 5/10\n",
      "90/90 [==============================] - 20s 227ms/step - loss: 0.0660 - categorical_accuracy: 0.9702 - val_loss: 0.0605 - val_categorical_accuracy: 0.9730\n",
      "Epoch 6/10\n",
      "90/90 [==============================] - 20s 225ms/step - loss: 0.0589 - categorical_accuracy: 0.9732 - val_loss: 0.0578 - val_categorical_accuracy: 0.9733\n",
      "Epoch 7/10\n",
      "90/90 [==============================] - 20s 226ms/step - loss: 0.0511 - categorical_accuracy: 0.9770 - val_loss: 0.0497 - val_categorical_accuracy: 0.9784\n",
      "Epoch 8/10\n",
      "90/90 [==============================] - 20s 225ms/step - loss: 0.0409 - categorical_accuracy: 0.9825 - val_loss: 0.0432 - val_categorical_accuracy: 0.9821\n",
      "Epoch 9/10\n",
      "90/90 [==============================] - 20s 227ms/step - loss: 0.0328 - categorical_accuracy: 0.9871 - val_loss: 0.0356 - val_categorical_accuracy: 0.9858\n",
      "Epoch 10/10\n",
      "90/90 [==============================] - 20s 226ms/step - loss: 0.0262 - categorical_accuracy: 0.9901 - val_loss: 0.0328 - val_categorical_accuracy: 0.9864\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(db_train, epochs=10, steps_per_epoch=90, validation_data=db_val, validation_steps=50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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XCQRraTXxRMKMwJQa69MUVEREyZM4MiRI9x3330MHjyY8PBwfHx8eO6551i8eLHHz/f19a31urX2tMrXfIanzxIRae6stezJKa4eLlqzJ5+UA4W43L/merUPY8qADtUrjHrFtN5eF08ozHiJ+kzo+uKLL9i/fz//+c9/qldDHfXYY481VNMaTPfu3YHv5gHVVNs1EZHmori8snquyzr3XJecI+UAhAf6MSwukinn9CYxLpKErlG0CfGeXhdPKMx4ibCwMAByc3M9LnO0N+T4Ho9FixZ9b1l1czBixAhiY2OZPn06Dz/8cPW8maKiotPazE9EpDHsyy9hYXImH23MZOO+Aqrc3S49YkKZ3K89w+OjSIyLolf7MHy9uNfFEwozXmLkyJH4+PjwzDPPkJeXR2hoaHVPxomMHz+ejh078sADD5CWlkaXLl1Yv349s2bNYvDgwWzcuPEMtd4zfn5+vPjii9xwww2MGjWK22+/HT8/P6ZPn067du3YvXt3i1xyKCKtx4GCUhZuzGRB8n7WpjvzEAd3bsPdk3qSGBdFQlwkkSEBTdzKlkdhxkvExcXxn//8hxdeeIG77rqLiooKbrnllmOWaR8vMjKSTz/9lF/96le88sorVFZWMnz4cBYuXMi///3vZhdmAKZNm4afnx9PP/00TzzxBB06dOD2229nyJAhXHnllQQHBzd1E0XEy2QdLuPjTZks2JDJqj25WOucZfTQBX25aHAs3aJDT/2Q5sLlgoojUH7cR/W1Yuh2FkTGndFmmdY6aXLEiBF29erVJ71n69at1RvISev20ksv8eCDD/LNN98wZsyYM1avfsZEvFNOURmfbD7Agg2ZrNidg8tCnw5hXDykExcNiaVnTFjjNsDlgopid8AoOvbr8tqunyicHPdRWXLquq+eAQMvb/C3ZIxZY60dUdtr6pmRVqW8vBxfX99jVj8VFRXx17/+lXbt2pGYmNiErROR1iy/uJxPNx9gQXImX+/Mocpl6REdys8n9+LioZ3o0+EEu51XlkNJ3okDxAmvF7vDibtHpGY4qSiuW+MDwsA/BAJCna8DQiAwHMI7gn+o+3qI+7VQ971htV8P63D6/5h1pDAjrcquXbu48MILue666+jevTuZmZnMmDGD3bt38/e//52AAI1Fi0jDKSytYNHmgyxI3s+X27OpdFni2obw0wk9uHhI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\n",
      "text/plain": [
       "<Figure size 648x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(history.history['categorical_accuracy'])\n",
    "plt.plot(history.history['val_categorical_accuracy'])\n",
    "plt.legend(['training', 'valivation'], loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "360/360 [==============================] - 52s 145ms/step - loss: 0.0316 - categorical_accuracy: 0.9872\n"
     ]
    }
   ],
   "source": [
    "res = model.evaluate(db_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['loss', 'categorical_accuracy']"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.metrics_names"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
